package com.layblog.es.search.model;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;
import java.util.Date;

/**
 * model的内容根据文章列表的展示提取需要字段，需要标题，作者，作者id，VIP，分类，阅读数量，评论数量，创建时间等等...
 *
 * @Author 林必昭
 * @Date 2021/9/7 10:53
 */

@Data
@Document(indexName = "post", type = "post") //indexName为索引库名：建议使用项目名称命名，type：类型，个人建议以实体类名称命名
public class LayPostDocument implements Serializable {

    @Id
    private Long id;

    /**
     * 索引时，为了提供索引覆盖范围，通常analyzer采用ik_max_word分析器，以最细颗粒度分词索引，这样可以搜索的词语更多，
     * searchAnalyzer表示搜索时候的分词，搜索时为了提高搜索准确度，会采用ik_smart分析器，会以粗粒度分词
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String title;

    private Long authorId;

    @Field(type = FieldType.Keyword)
    private String authorName;

    private String authorVip;

    private String authorAvatar;

    private Long categoryId;

    /**
     * FieldType.Keyword需要完全匹配，不进行分词，直接索引
     */
    @Field(type = FieldType.Keyword)
    private String categoryName;

    private Boolean recommend;

    private Integer level;

    /**
     * FieldType.Text表示文本，需要经过分词，然后进行索引
     */
    @Field(type = FieldType.Text)
    private String tags;

    private Integer commentCount;

    private Integer viewCount;

    private Date created;
}
